package com.codejiwei.core.demo

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object WordCount1 {
  def main(args: Array[String]): Unit = {

    //步骤1：创建SparkConf，spark运行环境对象，设置Master、设置AppName
    val conf: SparkConf = new SparkConf().setMaster("local").setAppName("WordCount")

    //步骤2：创建SparkContext上下文环境对象
    val sc: SparkContext = new SparkContext(conf)

    //步骤3：读取数据文件
    val lines: RDD[String] = sc.textFile("E:\\workspace\\spark-app-sdk\\spark-core\\src\\main\\resources\\word.txt")

    //步骤4：切割一行一行的数据，为一个一个的单词，扁平化
    val words: RDD[String] = lines.flatMap(_.split(" "))

    //步骤5：根据word分组
    val groupRDD: RDD[(String, Iterable[String])] = words.groupBy(word => word)

    //步骤6：统计各个单词的数量
    val countRDD: RDD[(String, Int)] = groupRDD.map {
      case (word, list) => (word, list.size)
    }

    //按照单词的数量倒序排序
    val sortRDD: RDD[(String, Int)] = countRDD.sortBy(_._2, false)

    //步骤7：将结果收集到内存中
    val result = sortRDD.collect()

    //步骤8：将结果打印到控制台上
    result.foreach(println)

    //步骤9：关闭spark连接
    sc.stop()
  }
}
